<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
  <script>
    // 1.es6 对象的简写
    var name = "张三";
    var age = 18;
    var obj = {
      // name: name,
      name,
      // age: age,
      age,
      // run: function () { } //对象中函数的简写
      run() { }
    }



    // function MyArr() {

    // }
    // MyArr.of = function () {
    //   alert(2)
    // }
    // MyArr.prototype.reverse = function () {
    //   alert(11)
    // }
    // var arr1 = new MyArr();
    // arr1.reverse()
    // MyArr.of();
    // 1.Object.is() 比较俩个值是否相同 true/false
    // ES5 比较两个值是否相等，只有两个运算符：相等运算符（==）和严格相等运算符（===）。
    //   // 它们都有缺点，前者会自动转换数据类型，后者的NaN不等于自身，以及+0等于-0。
    //   // 与===的区别
    console.log(NaN === NaN);//false
    console.log(Object.is(NaN, NaN))
    console.log(+0 == -0)
    console.log(Object.is(+0, -0))
    console.log(Object.is(888, 888))
    //2.Object.assign(原对象，要合并对象) 合并对象
    // 合并对象是浅拷贝
    var obj1 = {
      name: "悟空",
      age: 888,
      jianli: {
        baigujing: "白骨精",
        honghaier: "红孩儿"
      }
    }
    var obj2 = {
      name: "八戒",
      tizhong: 999
    }
    // var obj3 = {
    //   ...obj1,
    //   ...obj2
    // }
    // console.log(obj3)
    Object.assign(obj2, obj1)
    console.log(obj2)

    obj2.jianli.baigujing = "王一烦";
    obj2.age = 1000;
    console.log(obj1)


    // 深拷贝2  递归深拷贝
    function deepClone(obj) {
      let objClone = Array.isArray(obj) ? [] : {};
      if (obj && typeof obj === "object") {
        for (var key in obj) {
          if (obj.hasOwnProperty(key)) {
            if (obj[key] && typeof obj[key] === "object") {
              objClone[key] = deepClone(obj[key])
            } else {
              objClone[key] = obj[key]
            }
          }
        }
      }
      return objClone;
    }
    //对象新增方法
    var obj7 = {
      name: "马保国",
      age: 69,
      sex: "男"
    }
    // 1.Object.keys() 把对象key整理为数组
    var arrs = Object.keys(obj7)
    console.log(arrs)
    // 判断对象是否为空
    if (Object.keys(obj7).length == 0) {
      alert("空对象")
    }
    // 2. Object.values() 把对象value值 整理为数组
    var arr7 = Object.values(obj7)
    console.log(arr7)
    //3.Object.entries() 获取对象的key，value
    var map1 = Object.entries(obj7)//[[key1,value1] ,[key2,value2]]
    console.log(map1)
  </script>
</body>

</html>